const authService = require('../services/authService');

// 用户注册控制器
exports.register = async (req, res) => {
    try {
        const { username, password, email } = req.body;

        // 基本参数验证
        if (!username || !password || !email) {
            return res.status(400).json({
                status: 400,
                message: '所有字段都是必填的'
            });
        }

        if (password.length < 6) {
            return res.status(400).json({
                status: 400,
                message: '密码长度至少为6位'
            });
        }

        // 邮箱格式验证
        const emailRegex = /^\w+([.-]?\w+)*@\w+([.-]?\w+)*(\.\w{2,3})+$/;
        if (!emailRegex.test(email)) {
            return res.status(400).json({
                status: 400,
                message: '邮箱格式无效'
            });
        }

        // 调用注册服务
        const userData = await authService.registerUser({ username, password, email });

        return res.status(201).json({
            status: 201,
            message: '注册成功',
            data: userData
        });
    } catch (error) {
        const status = error.status || 500;
        const message = error.message || '服务器内部错误';

        return res.status(status).json({
            status,
            message
        });
    }
};

// 用户登录控制器
exports.login = async (req, res) => {
    try {
        const { username, password } = req.body;

        // 基本参数验证
        if (!username || !password) {
            return res.status(400).json({
                status: 400,
                message: '用户名和密码都是必填的'
            });
        }

        // 调用登录服务
        const tokenData = await authService.loginUser({ username, password });

        return res.status(200).json({
            status: 200,
            message: '登录成功',
            data: tokenData
        });
    } catch (error) {
        const status = error.status || 500;
        const message = error.message || '服务器内部错误';

        return res.status(status).json({
            status,
            message
        });
    }
};

// 令牌刷新控制器
exports.refresh = async (req, res) => {
    try {
        // 从头部获取令牌
        const authHeader = req.headers.authorization;
        const refreshToken = req.headers['refresh-token'];

        if (!authHeader || !refreshToken) {
            return res.status(401).json({
                status: 401,
                message: '缺少令牌'
            });
        }

        // 提取访问令牌
        const token = authHeader.split(' ')[1];

        // 调用刷新服务
        const newTokenData = await authService.refreshToken(token, refreshToken);

        return res.status(200).json({
            status: 200,
            message: '令牌刷新成功',
            data: newTokenData
        });
    } catch (error) {
        const status = error.status || 500;
        const message = error.message || '服务器内部错误';

        return res.status(status).json({
            status,
            message
        });
    }
}; 